Can user defined function change default server collation? - sql-server

I`m using MSSQL Server 2014 for my web application where database collation is set to Latin1_General_CI_AS. In one of my queries I have problem with Turkish characters. Probably, problem occurs in user defined function which is called from query. So the question is, can collation of columns be changed if I for example alter table but not set any collation (I think that default DB collation should be set by default) change their type?

Related

How to change collation on SQL Server by SSMS

The purpose is that I want to change collation (database, table, column) from Chinese_Taiwan_Stroke_CS_AS to SQL_Latin1_General_CP1_CI_AS.
There is the way that I change the collation on database.
First, I use the old_db tasks --> General scripts... and set the script collation false with schema only.
Then, I renew the scripts database name to new_db and set the collation = SQL_Latin1_General_CP1_CI_AS.
There is no error to here.
Finally, I want to import the data from old_db to the new_db by export data from old_db to destination new_db, but it will show the error 0xc02020f4.
I think that this error is related to collation issue, but I want to change collation so the old_db and new_db must be different. How can I solve it?
By the way I have viewed other topics about change collation but it's still not work for me due to the error:
Incorrect syntax near the keyword 'CONVERT'
so I try another way to do.
Changing the collation at any level has no effect on actual data stored. You need to move externally or internally the data from a column to another or a table to another or all the table of the database to another database after allways having precisely specified the correct collation in the ALTER or CREATE statement

SQL Server collation -- closest to utf-8?

I can't seem to find a way to set the default collation of a database to utf(ish). For example:
For example, in mysql the default utf collation is called utf8_general_ci. Is there something similar for SQL server for this? Also, what does it use Latin1 as default?
According to https://learn.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver15#utf8, you add "_UTF8" to the collation name to enable use of UTF8. (SQL Server 2019 is required.) The example given is to change LATIN1_GENERAL_100_CI_AS_SC to LATIN1_GENERAL_100_CI_AS_SC_UTF8.
If you will be migrating an existing database from a older version, I believe extra care is required to insure collation conversion is handled properly. There can be side effects from the change in sorting. Also, existing table definitions will use their original collation. This might be an issue if creating new tables that will use the new collation by default.

SQL server collation change on the instance level

When a database is created from our application, it takes the default Collation. we don't want to pass the collation in the create database script.
A client has a collation set on the instance level that is Case Sensitive. So the database created for our application is in that collation which is something we don't want.
Can they change the collation on the instance level so the database that gets created will have the desired collation and they can change it back to whatever they want? How do we do this on the instance level?
Thanks for your time!
So the problem is that the database is not created by a script run in, say, SQL Management Studio, but a script launched from within the application.
As noted in the comments and another answers changing the server collation is possible but hairy, the best option in a case like this is creating the database empty, changing the collation (either with ALTER DATABASE or from Management Studio), and then create the rest of the database.
This would require changing the application, but only the creation of the database itself since the tables will take the collation of the database, not the server collation (and you can do it in a way that works for every client, check if the database exists and that case skip DB creation and proceed with the rest of objects).
As a final warning, note that having a DB with a collation different of the server collation would mean than the DB has a different collation than the tempdb, so if you use temporal tables you would have problems if you have WHERE's or JOIN's mixing temporal and regular tables. For example, supposing that SerialNumber is a char column, this query will fail with a collation error:
SELECT *
FROM Products
JOIN #TempTable ON #TempTable.SerialNumber=Products.SerialNumber
If that case you will have to modify the application and change the queries to something like this:
SELECT *
FROM Products
JOIN #TempTable ON #TempTable.SerialNumber=Products.SerialNumber COLLATE database_default
You can configure the instance collation which would require dropping the databases before changing it. Here is a link to setting or changing the Server Collation.
You can also do this on a database level. Here is information on setting or changing collation on the database level.
You may also want to read the collation clause which can also be applied to tables, columns, and casting expressions among additional options.

SQL Server Collation Inheritence

I've installed Umbraco into my ASP.NET MVC project and in installation asked for database information and generated catalog successfully.
I'm using a shared server which has a instance level collation that Turkish_CI_AS. While I tried some configuration I've encountered an error:
In Umbraco, while tried to listing users the exception I've encountered.
And so I've listed table's collation settings so I've discovered except nvarchar / varchar columns, all the columns' collations are NULL.
So in umbracoUsers (which is the users' table has a column 'id')
Information of users' table
I've also inspected Umbraco DB generator script via their source codes and there is no word like 'collation' in all scripts.
How to alter ALL column collations which are NULL to instance default collation?
Any ideas will be appreciated. Please do not hesitate :)
Regards.
I've found a workaround this issue. For some reason I don't know but if you define instance / database level collation Turkish_CI_AS, this corrupt column name case-insensitivity. If you really have to use Turkish_CI_AS as collation (just like me) create database with this collation (so let the tables be with this collation) then alter DATABASE's collation with Latin1_General_100_CI_AS. (maybe other collation will also work)
This workaround provides that tables' collations are still Turkish_CI_AS and column-name based case sensitivity problem will be solved.
Thanks for your answers.

How to change Instance Collation of sql server running on amazon rds?

I'm running SQL Server 2008R2 Standard edition on and RDS instance. I need to change the server's collation.So how can i change?
Based on documentation:
Amazon RDS creates a default server collation for character sets when
a SQL Server DB instance is created. This default server collation is
currently English (United States), or more precisely,
SQL_Latin1_General_CP1_CI_AS.
You can change the default collation at the database, table, or column level by overriding the collation when creating a new database or database object. For example, you can change from the default collation SQL_Latin1_General_CP1_CI_AS to Japanese_CI_AS for Japanese collation support. Even arguments in a query can be type-cast to use a different collation if necessary.
So change to desired collation on
database
ALTER DATABASE db_name
COLLATE collate_name;
column
ALTER TABLE dbo.table_name ALTER COLUMN col_name
type COLLATE collate_name;

Resources