UTF8mb4 unicode JDBC驱动程序
我有一些包含unicode字符的产品名称UTF8mb4 unicode JDBC驱动程序,jdbc,utf-8,coldfusion,mariadb,utf8mb4,Jdbc,Utf 8,Coldfusion,Mariadb,Utf8mb4,我有一些包含unicode字符的产品名称 ⚠️ 这是由于形成表情符号的一系列高ASCII字符造成的。在使用第三方工具将MSSQL数据导出到UTF-8文件以转换为Excel时,我遇到了类似的问题。在本例中,数据库和文件是正确的,但第三方工具在遇到表情符号时会崩溃 我们的方法是将表情符号转换为别名,这样信息就不会在转换过程中丢失。(如果去掉高ASCII字符,可能会丢失一些上下文。)为了清理emojis以使用别名,我编写了这个ColdFusion(CFC)来利用(JAR文件)将emojis转换为其AS
⚠️ 这是由于形成表情符号的一系列高ASCII字符造成的。在使用第三方工具将MSSQL数据导出到UTF-8文件以转换为Excel时,我遇到了类似的问题。在本例中,数据库和文件是正确的,但第三方工具在遇到表情符号时会崩溃 我们的方法是将表情符号转换为别名,这样信息就不会在转换过程中丢失。(如果去掉高ASCII字符,可能会丢失一些上下文。)为了清理emojis以使用别名,我编写了这个ColdFusion(CFC)来利用(JAR文件)将emojis转换为其ASCI7安全别名
emojijava = new emojijava();
emojijava.parseToAliases('I like Since...
- I'm not really in the business of supporting emojis
- My data is just product names targeted at UK, Europe and the United States for the foreseeable future
- I don't want to have to go through the same trouble with production (already defaulted to latin1_swedish_ci)
I decided to..
Match production, so I set the database, table, and fields to latin1_swedish_ci with help from
How to change the CHARACTER SET (and COLLATION) throughout a database?
and strip non ASCII characters in the product name
== edit don't do this, it takes out too many useful characters ==
<cfset productname = reReplace(productname, "[^\x20-\x7E]", "", "ALL")>
emojijava=new emojijava();
parseToAliases('我喜欢,因为
- 我不是真的支持表情符号
- 我的数据只是在可预见的未来针对英国、欧洲和美国的产品名称
- 我不想在生产中遇到同样的麻烦(已经默认为拉丁语和瑞典语)
我决定
匹配产品,因此我在来自的帮助下将数据库、表和字段设置为latin1_swedish_ci
并在产品名称中删除非ASCII字符
==编辑不要这样做,它会删除太多有用的字符==
string function ASCIINormalize(string inputString=""){
return createObject( 'java', 'java.text.Normalizer' ).normalize( javacast("string", arguments.inputString) , createObject( 'java', 'java.text.Normalizer$Form' ).valueOf('NFD') ).replaceAll('\p{InCombiningDiacriticalMarks}+','').replaceAll('[^\p{ASCII}]+','');
}
productname = ASCIINormalize(productname);
/*
Comparisons using java UDF versus reReplace regex:
"ABC Café ’test" (note: High ASCII non-normal whitespace characters used.)
ASCIINormalize = "ABC Cafe test"
reReplace = "ABC Caf test"
"čeština"
ASCIINormalize = "cestina"
reReplace = "etina"
"Häuser Bäume Höfe Gärten"
ASCIINormalize = "Hauser Baume Hofe Garten"
reReplace = "Huser Bume Hfe Grten"
*/
以下是我们如何剥离高ASCII字符,同时保留任何可能被回收的字符:
见“问号”在中是否有4个问号?我希望这2个表情符号有10个问号:hex:E29AA0 EFB88F F09F93B7
@RickJames我照样复制了文本,所以是的4???,它与开发人员在产品上导入的产品是一样的。顺便说一句,如果我在数据库处理它们之前没有明确说明,请参见添加的屏幕截图,这只是jdbc的使用我从未使用过MariaDB,但您不应该指定characterEncoding=utf8mb4
?仅供参考:我将CF2016与Microsoft JDBC SQL驱动程序和NVARCHAR字段一起使用,并且表情正确存储(使用默认拉丁语排序)。在同一专栏中,我们还支持多种外语,并且没有任何查询问题。我想知道这是否是严格意义上的JDBC问题。删除表情符号可能是我唯一的选择,谢谢。但正如您在添加的屏幕截图中所看到的,数据库确实可以很好地处理它们,只有ColdFusion中的JDBC驱动程序出错,我想ld认为它已经在某个地方通过正确的配置解决了。对于产品字段来说,表情没有意义。如果您期望的文本应该是ASCI7,您可以完全删除它们。如果这些是用户注释,则可能会丢失一些上下文或表达式,具体取决于表情的使用方式。注意:上述解决方案来自我的还建议使用名为JUnidecode的第三方java库。