在XLSX文件(Excel 2007)中的工作表的XML中,具有等于"s"的"t"属性的单元格标签是字符串类型.需要通过sharedStrings文档查找并转换c中的value标记.但是,有些单元格的s ="237"并且根本没有t属性.value标签有一个像39448这样的整数,它与sharedStrings文档无关.Excel中显示的值是日期1/1/2008.
s属性在XLSX中的ac标记中表示什么?
未知的价值
<c r="B47" s="237">
<v>39448</v>
</c>
Run Code Online (Sandbox Code Playgroud)
共享字符串值
<c r="C47" t="s">
<v>7</v>
</c>
Run Code Online (Sandbox Code Playgroud) 如果要将unicode数据保存到MSSQL,则需要保存为列类型nvarchar(et.al),并且必须在SQL STRING LITERALS前加上大写字母N.如果使用预准备语句,则不需要使用N作为前缀值.
插入tbl(col)值(N'hello')
如果您正在使用像ZF DB这样的ORM,那么您正在使用PDO来连接MSSQL(或者您正在Windows上部署,在这种情况下,您正在使用SQLSRV或PDO_SQLSRV,一切都会正常工作,我的问题不再有意义了).
如果您正在使用任何连接到Linux上的mssql(sybase,dblib等)的PDO变体,那么您将无法获得真实的预处理语句,仅进行模拟.
如果您已经在线路级别模拟了预准备语句,则SQL完全写出只有字符串文字,这意味着您必须为任何潜在的unicode值添加前缀N.
编辑:我可以从Linux获得unicode保存到MSSQL,但是将FreeTDS协议升级到7/8似乎打破了所有框架/库/ orms,因为绝对需要改变带有N前缀的普通SQL.我不确定互联网上有谁声称升级到协议版本7/8修复了他们的unicode问题实际上做了什么,除了用非便携方式手写每个SQL语句.似乎继续使用Freetds 4.2是处理Unicode/UTF-8和mssql的最佳方式.