用带法语口音的MySQL编码

用带法语口音的MySQL编码,mysql,encoding,Mysql,Encoding,我有一个数据库,里面有一系列带重音的法语单词 我的问题是,当我尝试选择lengthé时,它总是返回2。因此,如果我需要得到所有7个字母的单词,它将永远不会起作用 我尝试了以下方法: ALTER DATABASE my_database CHARACTER SET utf8 COLLATE utf8_bin ALTER TABLE my_table CHARACTER SET utf8 COLLATE utf8_bin 但这并没有改变任何事情。我还尝试了拉丁1/latin1_-bin和utf16

我有一个数据库,里面有一系列带重音的法语单词

我的问题是,当我尝试选择lengthé时,它总是返回2。因此,如果我需要得到所有7个字母的单词,它将永远不会起作用

我尝试了以下方法:

ALTER DATABASE my_database CHARACTER SET utf8 COLLATE utf8_bin
ALTER TABLE my_table CHARACTER SET utf8 COLLATE utf8_bin
但这并没有改变任何事情。我还尝试了拉丁1/latin1_-bin和utf16/utf16_-bin,没有变化


谢谢。

使用字符长度而不是长度。LENGTH以字节为单位返回长度,但在utf-8中并不总是1。

LENGTH函数返回字节数

您需要使用该函数,它返回的字符数与字节数无关。

ALTER语句不起作用的原因是它们只为新创建的表如何编码文本设置规则。对于已经存在的表,ALTER语句不会更改任何内容

我发现它描述了如何使用iconv将现有的MySQL数据库从latin1转换为utf8。命令如下:

mysqldump --add-drop-table my_database | replace CHARSET=latin1
    CHARSET=utf8 | iconv -f latin1 -t utf8 | mysql my_database
其他提到长度和字符长度之间区别的答案是正确的,您也应该注意这一点

选择lengthé,它始终返回2

这意味着您可能已经正确设置了模式。除非有其他问题,否则不要进行任何更改


作为进一步确认,选择HEXcol…-您应该看到C3A9 foré;这是utf8编码的十六进制。

谢谢您的回答。否。不要像转换拉丁语一样转换utf8。表中的数据可能是正确的;如果你已经做了iconv,这个字母将显示为C383C2A9,长度现在是4-这意味着双重编码。要撤消iconv,使用utf8和utf8的ConvertBinaryConvertUnExcol和使用拉丁文1和utf8的ConvertUnExcol可能会起作用。