我在MySQL数据库的BLOB
列中有数据,我怀疑这些数据完全是UTF-8编码的文本(因此最好存储为TEXT
),但我想测试一下。
有没有办法可以检查二进制字符串是否在SQL中是有效的UTF-8?所以我可以这样做:
SELECT SUM(IS_UTF8(col)) / SUM(1) as `percentUtf8`
FROM table
答案 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";