MySQL检查BLOB是否有效UTF-8

时间:2016-02-12 01:55:15

标签: mysql utf-8 character-encoding blob

我在MySQL数据库的BLOB列中有数据,我怀疑这些数据完全是UTF-8编码的文本(因此最好存储为TEXT),但我想测试一下。

有没有办法可以检查二进制字符串是否在SQL中是有效的UTF-8?所以我可以这样做:

SELECT SUM(IS_UTF8(col)) / SUM(1) as `percentUtf8`
FROM table

1 个答案:

答案 0 :(得分:0)

“高效”适合你?还是电脑? mb_check_encoding只需一次读取数据即可完成 - 对计算机而言非常有效。但是你需要编写代码来识别所有的blob,然后选择等等 - 对你来说效率低下。

嗯,这是一种生成繁琐部分的方法:

> mysql ... information_schema > sql.inc
SELECT  CONCAT('Foo("', table_schema, '", "', table_name, '",
                        "', column_name, '");'
              )
    FROM  tables
    JOIN  columns USING (table_schema, table_name)
    WHERE  column_type LIKE '%BLOB'
      OR   column_type LIKE '%BINARY%';
exit;

对我来说,sql.inc包含类似

的内容
Foo("test", "07", "md5");
Foo("test", "jpg", "jpg");
Foo("test", "key2", "stuff");
Foo("test", "picsav", "thumb");
Foo("try", "bin16", "bin16");
Foo("try", "bin16", "bin32");
Foo("try", "blobs", "b");
Foo("try", "f521951", "blob_c");

然后编写PHP function Foo(db, tbl, col)子例程来进行测试并显示您喜欢的任何内容 - 或者对结果采取行动。做require "sql.inc";