简单 CREATE TABLE 命令中的奇怪语法错误 - PostgreSQL、MySQL 和 SQLite

Strange syntax error in simple CREATE TABLE command - PostgreSQL, MySQL, & SQLite

我遇到 PostgreSQL、MySQL 和 SQLite 的语法错误,我不明白。当相同的 CREATE TABLE 命令是来自 Python 的 运行 并且作为 pgAdmin4 和 MySQL WorkBench 中的查询时,它会发生。使用 MS SQL Server Management Studio,相同的命令在 SQL 服务器上完美运行。

命令是:

create table asDataSpecs ( NumField1 integer, CharField1 char(30), CharField2 char(30) )

pgAdmin4 显示错误消息:

LINE 1: ...e asDataSpecs ( NumField1 integer, CharField1 char(30), Char...
                                                             ^
SQL state: 42601
Character: 62

MySQL 在同一点生成“错误代码:1064”: 错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1

行的 '(30), CharField2 char(30) )' 附近使用的正确语法

PostgreSQL & MySQL 当此命令在 Python 中为 运行 时,可以理解地在同一点失败 - 作为连接到的游标上的 .execute()适当的后端和数据库。

SQLite(运行 在同一 Python 程序中使用 .execute())可能在同一点产生错误: 尝试创建 'asDataSpecs' table 时失败 'Try' 在“(”附近:语法错误

为什么 PostgreSQL、MySQL 和 SQLite 接受“整数”字段,但拒绝第一个“字符”字段 - 但 MS SQL服务器运行还好吗?

(我不认为这是一个凭据问题,因为我成功地使用具有相同凭据的 ODBC 在同一数据库中创建其他 tables - 在所有四个后端中。我会期待不同的错误消息,如果凭据是问题 - 它不应该接受数字字段。)

就是这样 - 时髦的隐藏角色。 (字段名称和数据类型之间有一些高位 ASCII 字符,而不是正常的 space (ASCII 32)。)

所有平台现在都按预期工作,包括 Python 程序和各自的后端管理控制台。

对于任何感兴趣的人,即使 NotePad++ 也将其显示为 space。但基本的Windows记事本揭开了谜底。

再次感谢“粘位”。