mysql1418错误
错误如图执行升级/安装脚本时发生了错误:An exception occurred while executing ‘ insert INTO biz_answer_question_report (...
2024.11.12现网中遇到很多小伙伴不清楚字符串与进制之间的转换方法,其实在GaussDB(DWS)中,进制转换是非常方便的。这次就来对不同的场景一一进行解析,整理出来供大家翻阅参考。
字符串&二进制 互转# 字符串转二进制,使用类型转换select bytea(‘华为‘::text);select ‘华为‘::text::bytea;select cast(‘华为‘::text as bytea); bytea---------------- \xe58d8ee4b8ba(1 row)# 二进制转字符串,使用convert_from,第二个参数为编码select convert_from(‘\xe58d8ee4b8ba‘::bytea,‘utf8‘); convert_from-------------- 华为(1 row)二进制&十六进制 互转# 二进制转十六进制,可以使用encode,select encode(‘\xe58d8ee4b8ba‘::bytea,‘hex‘); hex-------------- e58d8ee4b8ba(1 row)# 十六进制转二进制,820版本可以使用unhex,低于820版本可以使用decodeselect unhex(‘e58d8ee4b8ba‘::text); unhex---------------- \xe58d8ee4b8ba(1 row)select decode(‘e58d8ee4b8ba‘::text,‘hex‘); decode---------------- \xe58d8ee4b8ba(1 row)字符串&十六进制 互转# 字符串转十六进制,820版本可以使用hex,低于820版本可以使用encodeselect hex(‘华为‘::text); hex-------------- E58D8EE4B8BA(1 row)select encode(‘华为‘::text::bytea, ‘hex‘);encode-------------- e58d8ee4b8ba(1 row)# 十六进制转字符串,需先将十六进制转换为二进制,再转为字符串select convert_from(unhex(‘E58D8EE4B8BA‘),‘utf8‘); convert_from-------------- 华为(1 row)注意事项:1,hex/unhex是820版本新增的一组十六进制的编码/解码函数,低于820版本需使用encode/decode函数替代。
hex行为与mysql数据库保持一致,输出全大写的十六进制字符串;encode输出的是全小写的十六进制字符串;对大小写有要求的小伙伴可以选择满足要求的函数,但实际在解析时是没有影响的。
select hex(‘华为‘::text); hex-------------- E58D8EE4B8BA(1 row)select encode(‘华为‘::text::bytea, ‘hex‘);encode-------------- e58d8ee4b8ba(1 row)2,在将二进制转为字符串的时候使用convert_from,第二个参数为源数据编码。
需要注意的是,一定保证源数据编码正确,否则就会产生非预期的结果,甚至报错。
像这样
# 源数据编码为utf8,但解析时错误指定为gbkselect convert_from(unhex(‘E58D8EE4B8BA‘),‘gbk‘); convert_from-------------- 鍗庝负(1 row)这样
# 源数据编码为gbk,但解析时错误指定为utf8select convert_from(unhex(‘bbaaceaa‘),‘utf8‘);ERROR:invalid byte sequence for encoding "UTF8": 0xbbCONTEXT:referenced column: convert_from知识小结转换函数encode
encode(data bytea, format text)描述:将二进制数据编码为文本数据。返回值类型:textSELECT encode(‘database‘, ‘base64‘);encode---------- ZGF0YWJhc2U=(1 row)decode(string text, format text)描述:将二进制数据从文本数据中解码。返回值类型:byteaSELECT decode(‘ZGF0YWJhc2U=‘, ‘base64‘);decode-------------- \x6461746162617365(1 row)转换函数convert_from
convert_from(string bytea, src_encoding name)描述:以数据库的编码方式转化字符串bytea。src_encoding指定源编码方式,在该编码下,string必须是合法的。返回值类型:textSELECT convert_from(‘\x6461746162617365‘,‘gbk‘); convert_from-------------- database(1 row)转换函数hex/unhex,需820或以上版本
hex(n)描述:n可以是int类型也可以是字符串。返回n的十六进制字符串。若参数含有NULL值,返回NULL。返回值类型:textSELECT hex(‘abc‘) as result; result-------- 616263(1 row)unhex(n)描述:执行hex(n)的反向操作,n可以是int类型也可以是字符串,将参数中的每一对十六进制数字理解为一个数字,并将其转化为该数字代表的字符。若参数含有NULL值,返回NULL。返回值类型:byteaSELECT unhex(‘616263‘) as result;result---------- \x616263(1 row)点击下方,第一时间了解华为云新鲜技术~
错误如图执行升级/安装脚本时发生了错误:An exception occurred while executing ‘ insert INTO biz_answer_question_report (...
2024.11.12mysql中有一个字段,存储文件路径,原来存储路径发生了变化,如何修改呢?把‘d:\alantop_dir\Alantop_Tool\Release\Tools\‘ 修改为 ‘D:\alantop_d...
2024.11.15在上一篇文章我们已经学习了python中的基础数据类型,今天我们来介绍一下数字中二进制、八进制、十六进制的表现形式及不同进制之间如何相互转换?1 二进制在python中我们使用 0b 开头,来表示二进...
2024.11.13如果通过网页获取用户输入的数据并将其插入 MySQL 数据库,那么就有可能发生 SQL注入攻击的安全问题,作为研发,有一条铁律需要记住,那就是永远不要相信用户的数据,哪怕他一再承诺是安全的SQL 注入...
2024.11.15MySQL时间、字符串、戳的转换select date_format(now(), ‘%Y-%m-%d %H:%i:%s’);结果:2018-05-02 20:24:10时间转时间戳select un...
2024.11.07