我在尝试使用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();
}
}
答案 0 :(得分:3)
表名中的.
个句点导致错误。见Does MySQL allows to create database with dot?
答案 1 :(得分:1)
您无法使用带有点的xxx.xxx.xxx.xxx_10FEED988A06
这样的名称创建表格。使用圆点是一种非法表达。
使用下划线_
代替它们(它们被用作普通约定)。他们的使用是合法的:
CREATE TABLE xxx_xxx_xxx_xxx_10FEED988A06
请参阅SQL小提琴here。
答案 2 :(得分:0)
你必须通过反引号来逃避你的表名。
替换此
CREATE TABLE xxx.xxx.xxx.xxx_10FEED988A06
通过
CREATE TABLE `xxx.xxx.xxx.xxx_10FEED988A06`
或更好地将.
更改为其他一些字符,例如_
,-
答案 3 :(得分:0)
将表名放在反引号中,它应该可以工作。期间搞乱了,因为它们通常用于定义数据库/表组合(例如CREATE TABLE mydb.mytable
)