mysql - 无法在 MySQL 中修剪() Char(195)

标签 mysql sql ascii

我导入并正在清理从较旧的大型机导出的一些数据,并且有相当多的行以异常字符(即 ASCII 字符 194、195、226 等)开头。我可以使用简单的 remainder = trim(leading '%' from permanent) 修剪掉大部分字符(其中 '%' 代表有问题的字符。

唯一不会被删除的字符是“Í”。如果我运行 remainder = trim(leading 'Í' from approximation) 查询,它不会找到并修剪该字符,如果我运行 ascii(remainder) 查询我的数据显示,对于以该字符开头的字符串,它显示为字符 195。

接下来,我运行了一个 remainder = trim(leading CHAR(195) from permanent) 查询,并且也跳过了该字符。

为什么我能够删除除了这个字符之外的所有其他字符,而 MySQL 显然可以将其转换为 ASCII 字符代码,并且在运行正常的选择查询并显示适用的记录时显示该字符没有任何问题?

更新 我还运行了以下查询:

remainder = trim(leading convert('Í' using ASCII) from remainder)

remainder = trim(leading convert('Í' using UTF8) from remainder)

remainder = trim(leading convert(Char(195) using ASCII) from remainder)

最佳答案

您的查询在我的 MySQL ( 5.5.44-0ubuntu0.14.04.1 ) 上运行正常。

它对您不起作用的原因可能是,由于字符集不匹配,您看到的字符 195 根本不是字符 195 ;例如,它可能是 0xCD 十六进制,或对应于 0xC38D 十六进制的 UTF8 序列,在这种情况下,修剪“Í”显然会将其转换为更奇怪的东西。

尝试使用 HEX() 检查有问题的字符。它是什么?

CD     Latin1 Í
C38D   UTF8   Í      <---
C3     CHAR(195)

请注意,Í 根本不是 CHAR(195),但 195 是 UTF8 中 Í 的开头

在紧要关头,您可以以十六进制执行该操作。

select unhex(trim(leading 'C38D' from HEX('Íturalde')));
+---------------------------------------------------+
| unhex(trim(leading 'C38D' from HEX('Íturalde')))  |
+---------------------------------------------------+
| turalde                                           |
+---------------------------------------------------+

这将修剪前导C38D或UTF8 Í,而忽略其他所有内容。

更新:您可能需要将表格转储到文本文件并尝试运行 recodeiconvfixcode就可以了。

关于mysql - 无法在 MySQL 中修剪() Char(195),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31566425/

相关文章:

python - MySQL-Python 代码将 `' 添加到数据库名称

mysql - 建立此简单数据库的最佳方法

java - 比较 Ascii 代码

python - Django如何自定义表名和外键字段

java - 在 Java 中将 Base64 字符串转换为字节值字符串

Powershell 无法正确打印重音字符

MySQL 使用没有 auto_increment 的递增值填充新列

mysql - 错误 : command 'x86_64-linux-gnu-gcc' when installing mysqlclient

mysql - 在sql中使用某些条件将行转换为列

php - sql 数据库/php 中的模式值