UTF8mb4 unicode JDBC驱动程序

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

我有一些包含unicode字符的产品名称


⚠️ 这是由于形成表情符号的一系列高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库。