更改 MySQL 编码(关于十六进制代码?),例如 <fc> 为 ü
Change MySQL encoding (regarding hex codes?), such as <fc> to ü
我不确定我的错误是如何命名的,但我认为我的数据显示 hex codes 而不是实际的外来字符。
更准确地说,我有一个 MySQL 数据库,其中包含如下数据:
G<e9>rard
而不是 Gérard
或
M<fc>nster
而不是 Münster
.
显然我的专栏有一个 utf8_unicode_ci
编码(根据 phpMyAdmin)。
现在我想将 <e9>
之类的字符串转换为 é
,或者直接在 MySQL 数据库中,或者在显示输出时在 PHP 中。
显然其他人能够使用 this response 成功转换他们的 MySQL-table;
UPDATE db_name SET
column1=convert(cast(convert(column1 using latin1) as binary) using utf8),
column2=convert(cast(convert(column2 using latin1) as binary) using utf8)
但是,这对我来说没有任何改变。
那么如何实现转换呢?
谢谢!
如果特殊字符实际上是四个字符的序列,我将如何解决这个问题。
首先确保table全部转换为utf8mb4:
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4;
使用REPLACE() function逐一修复每个字符。
UPDATE mytable SET
column1 = REPLACE(column1, '<e9>', 'é'),
column2 = REPLACE(column2, '<e9>', 'é');
如果您通过复制和粘贴编辑此 SQL 查询,请小心。确保在 =
的左侧和右侧都固定 column2
。否则如果忘记了,可以将column1的内容复制到column2中,而column2的旧内容就丢失了。
完成 é
后,对 ü
执行类似的语句:
UPDATE mytable SET
column1 = REPLACE(column1, '<fc>', 'ü'),
column2 = REPLACE(column2, '<fc>', 'ü');
您将逐渐清理所有这些十六进制序列。你可以搜索table看看你还有没有剩余:
SELECT DISTINCT REGEXP_SUBSTR(column1, '<[[:xdigit:]]{2}>') FROM mytable
WHERE REGEXP_LIKE(column1, '<[[:xdigit:]]{2}>');
(MySQL REGEXP_SUBSTR() 需要 8.0)
我不确定我的错误是如何命名的,但我认为我的数据显示 hex codes 而不是实际的外来字符。
更准确地说,我有一个 MySQL 数据库,其中包含如下数据:
G<e9>rard
而不是Gérard
或M<fc>nster
而不是Münster
.
显然我的专栏有一个 utf8_unicode_ci
编码(根据 phpMyAdmin)。
现在我想将 <e9>
之类的字符串转换为 é
,或者直接在 MySQL 数据库中,或者在显示输出时在 PHP 中。
显然其他人能够使用 this response 成功转换他们的 MySQL-table;
UPDATE db_name SET
column1=convert(cast(convert(column1 using latin1) as binary) using utf8),
column2=convert(cast(convert(column2 using latin1) as binary) using utf8)
但是,这对我来说没有任何改变。
那么如何实现转换呢?
谢谢!
如果特殊字符实际上是四个字符的序列,我将如何解决这个问题。
首先确保table全部转换为utf8mb4:
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4;
使用REPLACE() function逐一修复每个字符。
UPDATE mytable SET
column1 = REPLACE(column1, '<e9>', 'é'),
column2 = REPLACE(column2, '<e9>', 'é');
如果您通过复制和粘贴编辑此 SQL 查询,请小心。确保在 =
的左侧和右侧都固定 column2
。否则如果忘记了,可以将column1的内容复制到column2中,而column2的旧内容就丢失了。
完成 é
后,对 ü
执行类似的语句:
UPDATE mytable SET
column1 = REPLACE(column1, '<fc>', 'ü'),
column2 = REPLACE(column2, '<fc>', 'ü');
您将逐渐清理所有这些十六进制序列。你可以搜索table看看你还有没有剩余:
SELECT DISTINCT REGEXP_SUBSTR(column1, '<[[:xdigit:]]{2}>') FROM mytable
WHERE REGEXP_LIKE(column1, '<[[:xdigit:]]{2}>');
(MySQL REGEXP_SUBSTR() 需要 8.0)