首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将字符串保存到Mysql之前对字符长度超过3个字节的字符串进行验证

在将字符串保存到Mysql之前对字符长度超过3个字节的字符串进行验证
EN

Stack Overflow用户
提问于 2019-11-14 14:24:21
回答 2查看 273关注 0票数 1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-15 12:47:23

计划A:

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

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

B计划:

尝试将文本插入到备用表的CHARACTER SET utf8列中。再读一遍,看看是否匹配。存储一个4字节的字符将会把它变成问号或者截断字符串。无论哪种情况,都不会匹配。

票数 0
EN

Stack Overflow用户

发布于 2019-11-14 14:43:25

如果您希望只在mysql查询中插入数据,而不是通过编程的方式,那么可以使用length()函数来检查字节长度。

MySQL提供了LENGTH函数和CHAR_LENGTH函数,前者用于获取字符串的字节长度,后者用于获取字符串的字符长度。如果字符串包含多字节字符,则LENGTH函数的结果大于CHAR_LENGTH()函数的结果

http://www.mysqltutorial.org/mysql-character-set/

示例查询如下

代码语言:javascript
复制
insert into x_table(data_string)
SELECT 'šč' as data_string where length('šč')<4

在Java中,在插入到mysql之前检查长度

使用

代码语言:javascript
复制
String s = new String("stringvalue");

byte[] bytes = s.getBytes("UTF-8");

System.out.println("bytes.length = "+bytes.length);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58850593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档