我正试图编写一个查询,将分析跨多个表中存储在主键中的数据,以查找它们是否包含unicode字符。
下面是我的表的模式:
mysql> SHOW CREATE TABLE employee_plain;
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| employee_plain | CREATE TABLE `employee_plain` (
`emp_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`emp_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`age` int(3) DEFAULT NULL,
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SHOW CREATE TABLE employee_unicode;
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| employee_unicode | CREATE TABLE `employee_unicode` (
`emp_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`emp_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`age` int(3) DEFAULT NULL,
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
下面是两个表上的数据存储。表employee_unicode
包含PRIMARY KEY列中的unicode值:
mysql> select * from employee_plain;
+------------------------------+----------+------+
| emp_id | emp_name | age |
+------------------------------+----------+------+
| asdasd123 | abcsd | 12 |
| fsoiuioujvsdf4 | abvkd | 13 |
| sdfgjshgjshdfljsfklju4532489 | sdfsdff | 11 |
+------------------------------+----------+------+
3 rows in set (0.00 sec)
mysql> select * from employee_unicode;
+--------------------------------------------------------------+----------+------+
| emp_id | emp_name | age |
+--------------------------------------------------------------+----------+------+
| A ΠΛΦΟΙΚ ΑΕ#1420000000000000000 | sdfsf | 11 |
| sdfsdfsf234 | fsdfsd | 12 |
| ΑΣΕΛ - ΑΦΟΙ. ΣΕΛΙΔΗ Α.Ε.#000000000000000 | sdfsd | 13 |
| ΦΩΤΗΣ#10000000000 | sdfsdfd | 14 |
+--------------------------------------------------------------+----------+------+
4 rows in set (0.00 sec)
我尝试了各种查询使用ASCII,二进制和REGEX:
mysql> SELECT
-> TABLE_NAME,
-> COLUMN_NAME,
-> COLUMN_TYPE,
-> IF( COLUMN_NAME REGEXP '[^x00-x7F]', 'Contains Unicode', 'No Unicode') AS Unicode_validation
-> FROM
-> information_schema.columns
-> WHERE
-> table_schema = 'amv_testdb' AND
-> COLUMN_KEY = 'PRI'
-> ORDER BY
-> TABLE_NAME,
-> ORDINAL_POSITION;
+------------------+-------------+--------------+--------------------+
| TABLE_NAME | COLUMN_NAME | COLUMN_TYPE | Unicode_validation |
+------------------+-------------+--------------+--------------------+
| employee_plain | emp_id | varchar(100) | No Unicode |
| employee_unicode | emp_id | varchar(100) | No Unicode |
+------------------+-------------+--------------+--------------------+
2 rows in set (0.00 sec)
mysql> SELECT
-> TABLE_NAME,
-> COLUMN_NAME,
-> COLUMN_TYPE,
-> IF( COLUMN_NAME <> CONVERT( COLUMN_NAME USING ASCII), 'No Unicode', 'Contains Unicode') AS Unicode_validation
-> FROM
-> information_schema.columns
-> WHERE
-> table_schema = 'amv_testdb' AND
-> COLUMN_KEY = 'PRI'
-> ORDER BY
-> TABLE_NAME,
-> ORDINAL_POSITION;
+------------------+-------------+--------------+--------------------+
| TABLE_NAME | COLUMN_NAME | COLUMN_TYPE | Unicode_validation |
+------------------+-------------+--------------+--------------------+
| employee_plain | emp_id | varchar(100) | Contains Unicode |
| employee_unicode | emp_id | varchar(100) | Contains Unicode |
+------------------+-------------+--------------+--------------------+
2 rows in set (0.00 sec)
mysql> SELECT
-> TABLE_NAME,
-> COLUMN_NAME,
-> COLUMN_TYPE,
-> IF(CONVERT(COLUMN_NAME USING BINARY) <> COLUMN_NAME, 'Contains Unicode', 'No Unicode') AS Unicode_validation
-> FROM
-> information_schema.columns
-> WHERE
-> table_schema = 'amv_testdb' AND
-> COLUMN_KEY = 'PRI'
-> ORDER BY
-> TABLE_NAME,
-> ORDINAL_POSITION;
+------------------+-------------+--------------+--------------------+
| TABLE_NAME | COLUMN_NAME | COLUMN_TYPE | Unicode_validation |
+------------------+-------------+--------------+--------------------+
| employee_plain | emp_id | varchar(100) | No Unicode |
| employee_unicode | emp_id | varchar(100) | No Unicode |
+------------------+-------------+--------------+--------------------+
2 rows in set (0.00 sec)
请帮助我理解为什么我得到错误的结果。
如果查找包含非ASCII字符的数据,则将存储值与使用ASCII转换的值进行比较,例如WHERE emp_id <> CONVERT(emp_id USING ASCII)
CREATE TABLE employees (
emp_id VARCHAR(255),
emp_name VARCHAR(255),
age INT
);
INSERT INTO employees (emp_id, emp_name, age)
VALUES
('A ΠΛΦΟΙΚ ΑΕ#1420000000000000000', 'sdfsf', 11),
('sdfsdfsf234', 'fsdfsd', 12),
('ΑΣΕΛ - ΑΦΟΙ. ΣΕΛΙΔΗ Α.Ε.#000000000000000', 'sdfsd', 13),
('ΦΩΤΗΣ#10000000000', 'sdfsdfd', 14);
SELECT *
FROM employees
WHERE emp_id <> CONVERT(emp_id USING ASCII)
emp_id一个ΠΛΦΟΙΚΑΕ# 1420000000000000000 ΑΣΕΛ - ΑΦΟΙ。ΣΕΛΙΔΗΑΕ。#000000000000000 ΦΩΤΗΣ# 10000000000
WHERE HEX(emp_id) REGEXP '^(..)*[CDEFcdef]'
将发现任何至少有一个UTF-8字符的emp_id
。(即CHARACTER SET utf8
或utf8mb4
)
相关内容
- 使用多字符unicode符号的正则表达式匹配行为
- 无效XML:第454行错误:在CDATA节中发现了一个无效的XML字符(Unicode: 0x8)
- 如何使用 unicodedata 模块在 Python 3 中处理多字符 Unicode 表情符号?
- 通过命令行将带有特殊字符unicode的JSON文件推送到bigquery
- Visual studio 19读取宽字符(unicode)
- 如何解码谷歌表单中的特定字符(unicode)
- 无效的XML字符(Unicode:0x0)错误-正在解决问题
- 表情符号不起作用,无法识别特殊字符 unicode
- 如何在Overleaf LaTex中显示多字符Unicode表情符号?
- 通过限制主题包含非ASCII字符(unicode #160)的电子邮件
- 如何确定字符(Unicode代码点)是从左到右还是左右
- C# 将字符串转换为字符 - Unicode
- 特殊字符/ Unicode / 特殊符号到来自 php 的单词
- 成功编组后,在Unmarshalling上发现了无效的XML字符(Unicode:0x3)
- Python DELETE 字符(Unicode 7F)似乎没有做任何事情。它不应该删除后续字符,还是我做错了?
- 是否可以在Datamatrix 2D条形码中表示ASCII以外的字符?(Unicode?)
- Java XML解析器错误字符Unicode 0x1a从Word复制/粘贴时
- 'Charmap'编解码器无法编码字符(Unicode 塞尔维亚拉丁语)
- ASP-TextBox只接受字符[UniCode]-C#
- 如何使用 c# 语言呈现具有 5 位数字 (十六进制) 的字符 Unicode
最新更新
- Postgres无法加载ssl证书
- 我怎么能做一个文本搜索与Express和Mongo?
- 无法识别的客户端异常","错误消息":" 在本地测试 lambda 函数时,请求中包含的安全令牌无效
- 我有一个 roblox leaderstats 脚本,在 3 个不同的文件夹中有 2 个 IntValues,但它们无法正确保存。我不知道怎么了。我没有收到任何错误
- 为什么我得到Nodemailer不能/POST错误?
- 将数组转换为对象-具有特殊条件
- 如何在 JavaScript 中检查"is not defined" eval(var)?
- 错误NETSDK1152在WinUI3应用程序:发现多个发布输出文件具有相同的相对路径:Microsoft.Web.We
- 当我在Ubuntu16中使用字符串命令查找一些东西时,我没有得到任何输出
- Apache Spark: parse PT2H5M (duration ISO-8601) duration以分钟为单
- 如何在Parent还没有Id时添加Child
- 无法记录android应用程序的jmeter脚本
- 使用AsyncRabbitTemplate::sendAndReceive - RabbitMQ时的应答超时
- 是自定义文件扩展名吗?
- 选择远程docker容器(没有kubernetes)后, JVM列表为空
- c# TwinCAT数据类型的等效枚举
- 传递地址时,函数与函数模板的语法限制
- 如何将flutter riverpod ref.read()函数传递给另一个小部件
- Pug/Node.js中的循环优化
- Postgresql函数在删除t_providers的行之前作为触发器
- 在Python中替换字符串中类似模式的正则表达式
- Azure DevOps YAML:带有模板变量的If-else条件不起作用
- 我有麻烦管理我的循环while loo[,反之亦然
- 我怎么能使最后一行从图在PHP?
- 无法使用引导折叠折叠
- 当cell1的值大于cell2的值时显示模态对话框
- Vue模板使用JavaScript内置函数
- 使用python中除"in"以外的其他运算符"match"函数
- Powershell Where-Object returning null
- 在React中通过ClassName Prop扩展样式
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium