Mysql 如何将字符串字符限制为utf8mb3

Mysql 如何将字符串字符限制为utf8mb3,mysql,go,character-encoding,Mysql,Go,Character Encoding,我在Go中创建了一些用于解码输入的转换。 它的工作方式很有魅力(感谢“golang.org/x/net/html/charset”),但现在我必须将输出限制为仅包含在utf8mb3中的字符。 据我所知,go默认的“内置”是完整的utf-8。 问题是底层数据库设置被供应商规则锁定,并设置为utf8mb3(是的mysql),我们无法更改这些设置 到目前为止,我使用它来限制字符,并将“unallowed”重写为“*”: //编译我们的regexp。如果失败,返回未编码的 允许的字符集=“[^283š3

我在Go中创建了一些用于解码输入的转换。 它的工作方式很有魅力(感谢“golang.org/x/net/html/charset”),但现在我必须将输出限制为仅包含在utf8mb3中的字符。 据我所知,go默认的“内置”是完整的utf-8。 问题是底层数据库设置被供应商规则锁定,并设置为utf8mb3(是的mysql),我们无法更改这些设置

到目前为止,我使用它来限制字符,并将“unallowed”重写为“*”:

//编译我们的regexp。如果失败,返回未编码的
允许的字符集=“[^283š345;ťťťťŢŢŢŢŢŢŽŢŤŤŤťťťťťŢŢŢŢŢŢŢŢŢŢŢŢŢŢŢŢŢŢ35`
reg:=regexp.MustCompile(allowedCharsREGEX)
procString:=outtr
//替换不允许的字符
procString=reg.ReplaceAllString(outsr,“*”)
限制输出字符,但要将其扩展到utf8mb3字符列表。 从文档中可以看出,unicode的有效性是完整的utf8。 有没有可能的“快速解决方案”


转到版本1.13,ubuntu 20.04,并不是所有的事情都应该用regexp来完成

utf8mb3包含BMP中的所有符文,可以用UTF-8中的3个字节进行编码

sb := &strings.Builder{}
for _, r := range input {
    if r < 0xFFFF {
        sb.WriteRune(r)
    } else {
        sb.WriteByte('*')
    }
 }
 return sb.String
sb:=&strings.Builder{}
对于u,r:=范围输入{
如果r<0xFFFF{
某人的笔迹(右)
}否则{
sb.WriteByte('*'))
}
}
把绳子还给某人

Off-topic但你为什么要使用Go 1.13?它不受支持,最新版本是Go 1.16。你不应该通过dpkg/apt安装Go。使用。Ubuntu的Go软件包落后。这不是安装Go的“官方”方式。官方方式是从中获取Go。他们支持最新的两个主要版本(目前为Go 1.16和1.15).Flimzy,icza如果我有时间的话,我很乐意在每次新版本发布时手动重新安装go。但通常情况下,要维护的服务器超过300台,所以没有时间。这就是我使用官方repos版本的原因。@Viker你可以编写一个脚本来下载最新版本并替换旧版本,不管你要在多少台计算机上运行它。工作出色,谢谢你,沃克