如何处理任何字符集

时间:2019-09-21 13:49:07

标签: mysql symfony character-encoding doctrine

当前我有utf8字符集(doctrine.dbal.charset)

如何为任何编码数据存储在db中提供可能性?

我的应用程序使用户可以上传带有数据的文件(csv)。数据将被排除并分别存储到数据库的不同列中。

问题在于它们不仅上传utf8编码的文件。 大多数转换器在转换时会丢失/破坏数据(例如:cp1251-> utf8)

1 个答案:

答案 0 :(得分:0)

您可以声明 client 具有以CHARACTER SET cp1251编码的数据。您还可以在LOAD DATA语句中指定该语句,这是将CSV文件读入MySQL表的最简单,最快的方法。

除非csv文件具有某种欺骗性的语法,否则LOAD DATA会为您进行所有解析等。

我认为所有 cp1251字符都具有对应的utf8编码。因此您可以(可能应该)将doctrine.dbal.charset声明为utf8(或者更好的是utf8mb4)。 CHARACTER SETs支持cp1251和latin1。

如果遇到Mojibake,截断或问号,请参见Trouble with UTF-8 characters; what I see is not what I stored

如果您不知道文件具有什么字符集,请提供几十个字符的十六进制;我大概可以弄清楚。 MySQL会简单地对任何错误指定的字符集进行反驳。