我使用的Mysql有字符编码utf8,但是某些超过3个字节的字符集不会被保存。我本可以将编码更改为utf8mb4,但这不是一个选项。我所要做的就是验证一个字符串,以检查该字符串是否会保存到Mysql中。我不想不必要地将我的字符限制为ASCII。如何检查一个字符占用的字节是否超过三个字节?
发布于 2019-11-15 12:47:23
计划A:
在您的应用程序语言中,将字符串转换为十六进制。然后查找f0。该字节将指示需要utf8mb4。
在MySQL中,表达式是HEX(col) REGEXP '^(..)*f0'。
B计划:
尝试将文本插入到备用表的CHARACTER SET utf8列中。再读一遍,看看是否匹配。存储一个4字节的字符将会把它变成问号或者截断字符串。无论哪种情况,都不会匹配。
发布于 2019-11-14 14:43:25
如果您希望只在mysql查询中插入数据,而不是通过编程的方式,那么可以使用length()函数来检查字节长度。
MySQL提供了LENGTH函数和CHAR_LENGTH函数,前者用于获取字符串的字节长度,后者用于获取字符串的字符长度。如果字符串包含多字节字符,则LENGTH函数的结果大于CHAR_LENGTH()函数的结果
http://www.mysqltutorial.org/mysql-character-set/
示例查询如下
insert into x_table(data_string)
SELECT 'šč' as data_string where length('šč')<4在Java中,在插入到mysql之前检查长度
使用
String s = new String("stringvalue");
byte[] bytes = s.getBytes("UTF-8");
System.out.println("bytes.length = "+bytes.length);可以在插入(String.getBytes().length)之前检查bytes.length。
https://stackoverflow.com/questions/58850593
复制相似问题