SQL语法错误创建新表时
本文关键字:新表时 创建 错误 语法 SQL | 更新日期: 2023-09-27 18:04:51
我得到一个错误,而试图在MySQL中创建一个表。我不知道这是怎么回事。我认为它可能是一个保留词"Name",但我将其重命名为CharName,认为这会有所帮助。有人对此有什么见解吗?
这是我的字符串:
CREATE TABLE xxx.xxx.xxx.xxx_10FEED988A06 (
`Date` datetime NOT NULL ,
`Guid` varchar(255) NULL ,
`CharName` varchar(255) NULL ,
`Server` varchar(255) NULL ,
`CpuId` varchar(255) NULL ,
`HardDriveId` varchar(255) NULL ,
`MacAddress` varchar(255) NULL ,
`IpAddress` varchar(255) NULL ,
`MD5` varchar(255) NULL ,
PRIMARY KEY (`Date`)
)
这是我的错误:
MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL
syntax; check the manual that corresponds to your MySQL server version for the
right syntax to use near '70.210.131.54_10FEED988A06 (`Date` datetime NOT NULL
,`Guid` varchar(255) NULL' at line 1
下面是我的代码:
public static void CreateNonUsersTable()
{
const string myConString = "Server=" + Server + ";" +
"PORT=" + Port + ";" +
"DATABASE=" + NonusersDataBase + ";" +
"Persist Security Info=No;" +
"Convert Zero Datetime=True;" +
"Encrypt=True;" +
"SslMode=Required;" +
"username=" + DbUser + ";" +
"password=" + DbPass + ";";
string createUser = @"CREATE TABLE " + Username + " (" +
"`Date` datetime NOT NULL ," +
"`Guid` varchar(255) NULL ," +
"`CharName` varchar(255) NULL ," +
"`Server` varchar(255) NULL ," +
"`CpuId` varchar(255) NULL ," +
"`HardDriveId` varchar(255) NULL ," +
"`MacAddress` varchar(255) NULL ," +
"`IpAddress` varchar(255) NULL ," +
"`MD5` varchar(255) NULL ," +
"PRIMARY KEY (`Date`))";
Logger.Write(myConString, Enums.LogType.Info);
Logger.Write(createUser, Enums.LogType.Info);
using (var conn = new MySqlConnection(myConString))
{
conn.Open();
using (var cmd = new MySqlCommand(createUser, conn))
{
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Logger.Write(ex.ToString(), Enums.LogType.Exception);
}
finally
{
cmd.Dispose();
}
}
conn.Close();
conn.Dispose();
}
}
表名中的.
句点导致错误。参见MySQL允许用点创建数据库吗?
不能使用像xxx.xxx.xxx.xxx_10FEED988A06
这样带点的名称创建表。使用点是非法的表达式。
使用下划线_
代替(它们作为通用惯例使用)。它们的使用是合法的:
CREATE TABLE xxx_xxx_xxx_xxx_10FEED988A06
你必须用反号转义你的表名
替换这个
CREATE TABLE xxx.xxx.xxx.xxx_10FEED988A06
CREATE TABLE `xxx.xxx.xxx.xxx_10FEED988A06`
或最好将.
更改为_
, -
等其他字符
将表名放在反引号中,它应该可以工作。句点会把它搞得一团糟,因为它们通常用于定义数据库/表组合(例如CREATE TABLE mydb.mytable
)