Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在将字符串保存到Mysql之前验证字符串是否占用3个字节以上的字符_Mysql_Database_Character Encoding_Char - Fatal编程技术网

在将字符串保存到Mysql之前验证字符串是否占用3个字节以上的字符

在将字符串保存到Mysql之前验证字符串是否占用3个字节以上的字符,mysql,database,character-encoding,char,Mysql,Database,Character Encoding,Char,我正在使用的Mysql数据库具有字符编码utf8,但某些超过3字节的字符集不会被保存。我本可以将编码更改为utf8mb4,但这不是一个选项。我只想验证一个字符串,检查该字符串是否会保存在Mysql中。我不想不必要地将我的字符限制为ASCII。如何检查一个字符的长度是否超过三个字节?如果只希望在mysql查询中插入数据,而不希望在programmaticaly中插入数据,则可以使用length()函数检查字节长度 MySQL提供了LENGTH函数以字节为单位获取字符串长度,CHAR_LENGTH函

我正在使用的Mysql数据库具有字符编码utf8,但某些超过3字节的字符集不会被保存。我本可以将编码更改为utf8mb4,但这不是一个选项。我只想验证一个字符串,检查该字符串是否会保存在Mysql中。我不想不必要地将我的字符限制为ASCII。如何检查一个字符的长度是否超过三个字节?

如果只希望在mysql查询中插入数据,而不希望在programmaticaly中插入数据,则可以使用length()函数检查字节长度

MySQL提供了LENGTH函数以字节为单位获取字符串长度,CHAR_LENGTH函数以字符为单位获取字符串长度。如果字符串包含多字节字符,则LENGTH函数的结果大于CHAR_LENGTH()函数的结果

下面是示例查询

insert into x_table(data_string)
SELECT 'šč' as data_string where length('šč')<4

可以在插入(String.getBytes().length)之前检查bytes.length。

如果只希望在mysql查询中插入数据,而不希望在programmaticaly中插入数据,则可以使用length()函数检查字节长度

MySQL提供了LENGTH函数以字节为单位获取字符串长度,CHAR_LENGTH函数以字符为单位获取字符串长度。如果字符串包含多字节字符,则LENGTH函数的结果大于CHAR_LENGTH()函数的结果

下面是示例查询

insert into x_table(data_string)
SELECT 'šč' as data_string where length('šč')<4
插入(String.getBytes().length)之前可以检查bytes.length。

计划A:

在应用程序语言中,将字符串转换为十六进制。然后查找
f0
。该字节表示需要utf8mb4

在MySQL中,表达式是
HEX(col)REGEXP'^(..)*f0'

方案B:

尝试将文本插入备用表的
字符集utf8
列。把它读回去,看看是否匹配。存储一个4字节的字符会将其变成问号或截断字符串。无论哪种方式,都不匹配。

计划A:

在应用程序语言中,将字符串转换为十六进制。然后查找
f0
。该字节表示需要utf8mb4

在MySQL中,表达式是
HEX(col)REGEXP'^(..)*f0'

方案B:


尝试将文本插入备用表的
字符集utf8
列。把它读回去,看看是否匹配。存储一个4字节的字符会将其变成问号或截断字符串。不管怎样,它都不匹配。

所以你想在mysql或编程语言中检查它。我想在编程语言中检查它,这样我就不会试图在mysql中保存字符串并最终导致异常。那么你为什么不在问题中提及编程环境呢。哦,很抱歉!我使用的是JAVA.strings=newstring(“stringvalue”);字节[]字节=s.getBytes(“UTF-8”);System.out.println(“bytes.length=“+bytes.length”);所以你想在mysql或编程语言中检查它,我想在编程语言中检查它,这样我就不会试图在mysql中保存字符串并最终得到一个异常。那么你为什么不在问题中提到编程环境呢?哦,很抱歉!我使用的是JAVA.strings=newstring(“stringvalue”);字节[]字节=s.getBytes(“UTF-8”);System.out.println(“bytes.length=“+bytes.length”);但这并不是说长字符串中的单个字符是否为4字节UTF-8代码。但这并不是说长字符串中的单个字符是否为4字节UTF-8代码。@mAvericK-Oops,我忘了在MySQL代码中包含
HEX()
。@mAvericK-Oops,我忘了在MySQL代码中包含
HEX()